"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 5、html 及常见控件定位方法.py
"""
from selenium import webdriver
from selenium.webdriver.common.by import By

"""
html 铺垫
selenium 八大定位方式
常用定位方式练习
"""

# <a href='https://yuque.com' class='link'>链接</a>
"""
html介绍
标签 ： <a>  ->   用 <> 括起来的
属性 ： href ->   href = "值"
类属性 ： class  ->   class = '值'
"""

# selenium 常用定位元素  https://www.selenium.dev/documentation/webdriver/elements/locators/
"""
class_name -> class 属性对应的值
css selector(重点) -> css表达式
id（重点）  ->   id属性对应的值
name（重点）  ->  name属性对应的值
xpath（重点）  -> xpath 表达式
link_text   ->  匹配的文本
partial link text -> 查找其可见文本包含搜索值的瞄元素。如果多个元素匹配，则只会选择第一个元素
tag name -> 标签名称

# 定位公式： driver.find_element(By.定位方式, 定位元素)
"""
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

# id定位
driver.find_element(By.ID, "kw")  # 找不到元素会报错 ： NoSuchElementException - 常见错误
# name 定位
driver.find_element(By.NAME, 'wd')
# xpath 定位
driver.find_element(By.XPATH, '//input[@id="kw"]')
# css 定位
driver.find_element(By.CSS_SELECTOR, '#kw')
# 通过链接文本的方式 （1）元素一定是 a 标签 （2）输入的元素为标签内的文本
driver.find_element(By.LINK_TEXT, '元素定位').click()


def test_web_locate():
    driver = webdriver.Chrome()
    driver.get('https://vip.ceshiren.com/#/ui_study')
    # 通过 id 定位方式
    web_element = driver.find_element(By.ID, "locate_id")
    print(web_element)
    # =======================  定位元素 ；第一个传递定位方式，第二个传递定位元素。调用这个方法的返回值为 Webelement ===================
    web_element = driver.find_element(By.CSS_SELECTOR, '#locate_id > a > span')  # 右键复制 ： css
    # 结果为 ： <selenium.webdriver.remote.webelement.WebElement (session="ae0056acfa3c90f65deb09dbe3b84564", element="d6ba55a1-4822-4ca5-9fb3-cfcb7e0e0cb2")>
    print(web_element)  # 以后web自动化需要取元素的那些属性，可以直接debug查看元素对象
